﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fuyao.Business.Entities.Models;
using Fuyao.Business.Logic.BC;
using Fuyao.Win.UI.Util;
using Fuyao.Win.UI.Common;
using Fuyao.Win.UI.Mantenimientos;
using Fuyao.Win.UI.Reportes;

namespace Fuyao.Win.UI.Ventas
{
    public partial class frmGuiaRemision : Form
    {
        BusinessLogic bc = new BusinessLogic();

        #region Propiedades
        public bool action { get; set; }
        public GuiaRemision beGuiaRemision { get; set; }
        private Venta beVenta;
        public int GuiaRemisionID { get; set; }
        #endregion

        public frmGuiaRemision()
        {
            InitializeComponent();
        }

        private void frmGuiaRemision_KeyPress(object sender, KeyPressEventArgs e)
        {
            Utilitarios.cerrarFormularioEscape(e, this);
        }

        private void frmGuiaRemision_Load(object sender, EventArgs e)
        {
            loadUI();
        }

        private void loadUI()
        {
            loadDefaultInformation();
            if (GuiaRemisionID == 0) newGuiaRemision();
            else viewGuiaRemision();
        }

        private void loadDefaultInformation()
        {
            action = false;
            Parametro oParametroSerie = bc.getParametroByNombre(Constantes.PARAMETRO_SerieGuiaRemision);
            Parametro oParametroSerieComprobante = bc.getParametroByNombre(Constantes.PARAMETRO_SerieFactura);
            this.lblSerieComprobante.Text = oParametroSerieComprobante.Valor;
            Parametro oParametroNroGuiaRemision = bc.getParametroByNombre(Constantes.PARAMETRO_NumeroGuiaRemision);
            this.lblSerieGuiaRemision.Text = oParametroSerie.Valor;
            this.txtNroGuiaRemision.Text = bc.getNumeroGuia(Constantes.PARAMETRO_NumeroGuiaRemision);
            Utilitarios.cargarCboEstadosParametrosTable(this.cboMotivoTraslado, Constantes.PARAMETRO_MotivoGuiaRemision);
            Utilitarios.cargarCboConductor(this.cboConductor);
            this.cboMotivoTraslado.Focus();
            this.txtPuntoPartida.Text = Constantes.ADDRESS_FUYAO;
            Utilitarios.configurarGrilla(ref dgvDetalles);
            setColumnasGrilla();
            if (GuiaRemisionID == 0) this.Text = "NUEVA GUÍA DE REMISIÓN";            
            else this.Text = "CONSULTAR DATOS DE LA GUÍA DE REMISIÓN";          
        }

        private void setColumnasGrilla()
        {
            colProducto.DataPropertyName = "CodigoProducto";
            colDescripcion.DataPropertyName = "DescripcionProducto";
            colCantidad.DataPropertyName = "Cantidad";
            colPrecio.DataPropertyName = "PrecioUnitario";
            colImporte.DataPropertyName = "Importe";
        }

        private void viewGuiaRemision()
        {
            beGuiaRemision = bc.getGuiaRemisionByGuiaRemisionID(GuiaRemisionID);
            cargarDatosGuiabeGuiaRemision(beGuiaRemision);
            this.dgvDetalles.Enabled = false;
            deshabilitaControles(false);
        }

        private void cargarDatosGuiabeGuiaRemision(GuiaRemision GuiaRemision)
        {
            this.lblSerieGuiaRemision.Text = GuiaRemision.Serie;
            this.txtNroGuiaRemision.Text = GuiaRemision.NroGuiaRemisionDesc;
            this.txtNroGuiaRemision.Tag = GuiaRemision.NroGuiaRemision;
            this.txtNroComprobante.Text = GuiaRemision.NroComprobanteDesc;
            this.dtpFecEmision.Value = GuiaRemision.FechaCreacion;
            this.dtpFecTraslado.Value = (DateTime)GuiaRemision.FechaIniTraslado;
            this.txtNroGuiaInterna.Text = GuiaRemision.NroPedidoDesc;
            this.cboMotivoTraslado.SelectedValue = GuiaRemision.MotivoTraslado.ToString();
            if (string.IsNullOrEmpty(GuiaRemision.TipoComprobante) || (GuiaRemision.TipoComprobante != Constantes.VENTA_FACTURA_CODE && GuiaRemision.TipoComprobante != Constantes.VENTA_BOLETA_CODE))
            {
                this.rdbFactura.Checked = false;
                this.rdbBoleta.Checked = false;
            }
            else if (GuiaRemision.TipoComprobante == Constantes.VENTA_FACTURA_CODE)
            {
                this.rdbFactura.Checked = true;
                this.rdbBoleta.Checked = false;
            }
            else if (GuiaRemision.TipoComprobante == Constantes.VENTA_BOLETA_CODE)
            {
                this.rdbFactura.Checked = false;
                this.rdbBoleta.Checked = true;
            }
            this.cboConductor.Text = GuiaRemision.NombreConductor;
            this.txtRazonSocial.Text = GuiaRemision.NombreCliente;
            this.txtPuntoPartida.Text = GuiaRemision.PuntoPartida;
            this.txtPuntollegada.Text = GuiaRemision.PuntoLlegada;
            this.txtDni.Text = GuiaRemision.Cliente.DNI;
            this.txtRuc.Text = GuiaRemision.Cliente.RUC;
            this.txtDepartamento.Text = GuiaRemision.Cliente.DepartamentoDesc;
            this.txtProvincia.Text = GuiaRemision.Cliente.ProvinciaDesc;
            this.txtDistrito.Text = GuiaRemision.Cliente.DistritoDesc;
            this.txtPlaca.Text = GuiaRemision.PlacaAuto;
            this.txtMarca.Text = GuiaRemision.ModeloAuto;
            this.txtNombreTransportista.Text = GuiaRemision.NombreTransportista;
            this.txtRucTransportista.Text = GuiaRemision.RUCTransportista;
            this.dgvDetalles.DataSource = null;
            this.dgvDetalles.DataSource = GuiaRemision.DetalleGuiaRemisions;
  
        }

        private void deshabilitaControles(bool _val)
        {
            this.cboMotivoTraslado.Enabled = _val;
            this.cboConductor.Enabled = _val;            
            this.txtNroGuiaInterna.ReadOnly = !_val;
            this.txtNroGuiaInterna.BackColor = Color.White;
            this.txtMarca.ReadOnly = !_val;
            this.txtMarca.BackColor = Color.White;
            this.txtPlaca.ReadOnly = !_val;
            this.txtPlaca.BackColor = Color.White;
            this.txtNombreTransportista.ReadOnly = !_val;
            this.txtNombreTransportista.BackColor = Color.White;
            this.txtRucTransportista.ReadOnly = !_val;
            this.txtRucTransportista.BackColor = Color.White;
            this.txtPuntollegada.ReadOnly = !_val;
            this.txtPuntollegada.BackColor = Color.White;
            this.txtDepartamento.ReadOnly = !_val;
            this.txtDepartamento.BackColor = Color.White;
            this.txtProvincia.ReadOnly = !_val;
            this.txtProvincia.BackColor = Color.White;
            this.txtDistrito.ReadOnly = !_val;
            this.txtDistrito.BackColor = Color.White;
            this.dtpFecEmision.Enabled = _val;
            this.dtpFecTraslado.Enabled = _val;
            if (!rdbFactura.Checked && !rdbBoleta.Checked)
            {
                this.btnGrabaNroComprobante.Visible = true;
                this.grbTipoComprobante.Enabled = !_val;
            }
            else
            {
                this.grbTipoComprobante.Enabled = _val;
                this.txtNroComprobante.ReadOnly = !_val;
                this.txtNroComprobante.BackColor = Color.White;
                setPosicionbtnImprimir();
            }
        }

        private void newGuiaRemision()
        {
            beGuiaRemision = new GuiaRemision();
            beGuiaRemision.DetalleGuiaRemisions = new List<DetalleGuiaRemision>();
            beGuiaRemision.CreadoPor = VariablesGlobales.GlobalEnUsuario.UsuarioID;
            setPosicionbtnImprimir();
        }

        private void setPosicionbtnImprimir()
        {
            this.btnImprimirDatos.Location = new System.Drawing.Point(174, 22);
        }

        private void rdbFactura_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbFactura.Checked)
            {
                Parametro oParametroSerieComprobante = bc.getParametroByNombre(Constantes.PARAMETRO_SerieFactura);
                this.lblSerieComprobante.Text = oParametroSerieComprobante.Valor;
                this.txtNroComprobante.Focus();
                ErrorProv.SetError(this.rdbBoleta, "");
            }
        }

        private void rdbBoleta_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbBoleta.Checked)
            {
                Parametro oParametroSerieComprobante = bc.getParametroByNombre(Constantes.PARAMETRO_SerieBoleta);
                this.lblSerieComprobante.Text = oParametroSerieComprobante.Valor;
                this.txtNroComprobante.Focus();
                ErrorProv.SetError(this.rdbBoleta, "");
            }
        }

        private void cboMotivoTraslado_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboMotivoTraslado.SelectedIndex == 0) this.txtNroComprobante.Focus();
            else this.txtNroGuiaInterna.Focus();
        }

        private void txt_Leave(object sender, EventArgs e)
        {
            TextBox tbx = (TextBox)sender;
            if (string.IsNullOrEmpty(tbx.Text)) tbx.Text = "000000";
        }            

        private void txtNroComprobante_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Enter)) e.Handled = false;
            else e.Handled = true;
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                if (txtNroComprobante.Text == "000000")
                {
                    ErrorProv.SetError(txtNroComprobante, "Ingrese el número de comprobante a buscar");
                    return;
                }
                BuscarComprobante();
            }
        }

        private void BuscarComprobante()
        {
            Venta oVenta = bc.getVentaforGuiaRemision((this.rdbFactura.Checked ? "F" : "B"), this.lblSerieComprobante.Text, this.txtNroComprobante.Text);
            if (oVenta == null)
            {
                if (MessageBox.Show("La " + (this.rdbFactura.Checked ? "Factura" : "Boleta") + " no existe. Desea crearla?", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.YesNo,
                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    frmVentas frm = new frmVentas(Constantes.VENTA_FACTURA_ID);
                    frm.ShowDialog();
                    if (!string.IsNullOrEmpty(frm.NroComprobanteVenta) && !string.IsNullOrEmpty(frm.NroSerieComprobanteVenta))
                    {
                        oVenta = bc.getVentaforGuiaRemision((this.rdbFactura.Checked ? "F" : "B"), frm.NroSerieComprobanteVenta, frm.NroComprobanteVenta);
                        cargarDatosVenta(oVenta);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese el número de la guía interna para cargar los datos", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.txtNroComprobante.Text = "000000";
                    this.txtNroGuiaInterna.Focus();
                }
            }
            else if (oVenta.Estado == Constantes.FACTURA_ANULADA)
            {
                MessageBox.Show("El # de comprobante ingresado ha sido anulado", "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                this.txtNroComprobante.SelectAll();
                return;
            }
            else cargarDatosVenta(oVenta);
        }


        private void cargarDatosVenta(Venta oVenta)
        {
            if (oVenta.DetalleVentas.Count != 0)
            {
                DetalleGuiaRemision oDetalleGuiaRemision;
                beGuiaRemision.DetalleGuiaRemisions = new List<DetalleGuiaRemision>();
                foreach (DetalleVenta oDetalleVenta in oVenta.DetalleVentas)
                {
                    oDetalleGuiaRemision = new DetalleGuiaRemision();
                    oDetalleGuiaRemision.ProductoID = oDetalleVenta.ProductoID;
                    oDetalleGuiaRemision.Cantidad = Convert.ToInt32(Utilitarios.IsNumericWithReturnValue(oDetalleVenta.Cantidad));
                    beGuiaRemision.DetalleGuiaRemisions.Add(oDetalleGuiaRemision);
                }
            }            
            this.txtNroComprobante.Text = oVenta.NroVentaDesc;
            this.txtNroGuiaInterna.Text = oVenta.Pedido.NroPedidoDesc;
            this.txtRazonSocial.Text = oVenta.Pedido.Cliente.NombreCliente;
            this.txtRazonSocial.Tag = oVenta.Pedido.ClienteID;
            this.txtRuc.Text = oVenta.Pedido.Cliente.RUC;
            this.txtDni.Text = oVenta.Pedido.Cliente.DNI;
            this.txtPuntollegada.Text = oVenta.Pedido.Cliente.DireccionDesc;
            #region Se comenta a solicitud de la user PAMELA
            /*this.txtDepartamento.Text = oVenta.Pedido.Cliente.DepartamentoDesc;
            this.txtProvincia.Text = oVenta.Pedido.Cliente.ProvinciaDesc;
            this.txtDistrito.Text = oVenta.Pedido.Cliente.DistritoDesc;*/
            #endregion envio correo el dia sabado 21/12/2013
            this.dgvDetalles.DataSource = null;
            this.dgvDetalles.DataSource = oVenta.DetalleVentas;
            this.cboConductor.Focus();
        }

        private void txtNroGuiaInterna_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Enter)) e.Handled = false;
            else e.Handled = true;
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                if (this.txtNroGuiaInterna.Text == "000000")
                {
                    ErrorProv.SetError(this.txtNroGuiaInterna, "Ingrese el número de comprobante a buscar");
                    return;
                }
                BuscarGuiaInterna();
            }
        }

        private void BuscarGuiaInterna()
        {
            Pedido bePedido = bc.getGuiaInternaByNroPedido(this.txtNroGuiaInterna.Text.Trim());

            if (bePedido == null)
            {
                MessageBox.Show("El # de guia interna no es existe", "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                this.txtNroGuiaInterna.SelectAll();
                return;
            }

            if (bePedido.Estado == Constantes.GUIAINTERNA_ANULADO)
            {
                MessageBox.Show("El # de pedido ingresado ha sido anulado", "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                this.txtNroGuiaInterna.SelectAll();
                return;
            }

            beVenta = new Venta();
            beVenta.Pedido = new Pedido();
            beVenta.Pedido.Cliente = new Cliente();
            beVenta.DetalleVentas = new List<DetalleVenta>();            

            beVenta.Pedido.ClienteID = bePedido.ClienteID;
            beVenta.Pedido.Cliente.RUC = bePedido.Cliente.RUC;
            beVenta.Pedido.Cliente.DNI = bePedido.Cliente.DNI;
            beVenta.Pedido.Cliente.NombreCliente = bePedido.Cliente.NombreCliente;
            beVenta.Pedido.Cliente.DireccionDesc = bePedido.Cliente.DireccionDesc;
            beVenta.Pedido.Cliente.DepartamentoDesc = bePedido.Cliente.DepartamentoDesc;
            beVenta.Pedido.Cliente.ProvinciaDesc = bePedido.Cliente.ProvinciaDesc;
            beVenta.Pedido.Cliente.DistritoDesc = bePedido.Cliente.DistritoDesc;
            beVenta.Pedido.NroPedidoDesc = bePedido.NroPedidoDesc;
            

            DetalleVenta oDetalleVenta;
            foreach (DetallePedido oDetallePedido in bePedido.DetallePedidos)
            {
                oDetalleVenta = new DetalleVenta();

                oDetalleVenta.ProductoID = oDetallePedido.ProductoID;
                oDetalleVenta.Cantidad = Convert.ToInt32(Utilitarios.IsNumericWithReturnValue(oDetallePedido.Cantidad));
                oDetalleVenta.CodigoProducto = oDetallePedido.CodigoProducto;
                oDetalleVenta.DescripcionProducto = oDetallePedido.DescripcionProducto;
                oDetalleVenta.PrecioUnitario = oDetallePedido.PrecioUnitario;
                oDetalleVenta.Importe = Convert.ToDecimal(Utilitarios.IsNumericWithReturnValue(oDetallePedido.PrecioUnitario)) * Convert.ToInt32(Utilitarios.IsNumericWithReturnValue(oDetallePedido.Cantidad));
                beVenta.DetalleVentas.Add(oDetalleVenta);
            }
            cargarDatosVenta(beVenta);
            this.txtNroComprobante.Text = "000000";
            ErrorProv.SetError(this.txtRazonSocial, "");
            ErrorProv.SetError(this.txtPuntollegada, "");
        }

        private void cboConductor_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboConductor.SelectedIndex == 0)
            {
                this.txtLicenciaConducir.Text = string.Empty;
                return;
            }
            this.txtLicenciaConducir.Text = bc.getLicenciaConducirByConductorID(Convert.ToInt32(cboConductor.SelectedValue));
            ErrorProv.SetError(cboConductor, "");
        }

        private void btnImprimirDatos_Click(object sender, EventArgs e)
        {
            if (GuiaRemisionID > 0) imprimirOnlyGuiaRemision();
            else
            {
                if (validarCamposRequeridos())
                {
                    beGuiaRemision.NroVenta1 = Convert.ToInt32(txtNroComprobante.Text);
                    beGuiaRemision.NroPedido = Convert.ToInt32(txtNroGuiaInterna.Text);
                    beGuiaRemision.ClienteID = Convert.ToInt32(this.txtRazonSocial.Tag);
                    beGuiaRemision.PuntoLlegada = this.txtPuntollegada.Text.Trim();
                    beGuiaRemision.PuntoLlegadaDep = this.txtDepartamento.Text.Trim();
                    beGuiaRemision.PuntoLlegadaDist = this.txtDistrito.Text.Trim();
                    beGuiaRemision.PuntoLlegadaProv = this.txtProvincia.Text.Trim();
                    beGuiaRemision.PuntoPartida = this.txtPuntoPartida.Text.Trim();
                    beGuiaRemision.Serie = this.lblSerieGuiaRemision.Text.Trim();
                    beGuiaRemision.NroGuiaRemision = Convert.ToInt32(this.txtNroGuiaRemision.Text);
                    beGuiaRemision.ModeloAuto = this.txtMarca.Text.Trim();
                    beGuiaRemision.PlacaAuto = this.txtPlaca.Text.Trim();
                    beGuiaRemision.NombreConductor = this.cboConductor.Text.Trim();
                    beGuiaRemision.Brevete = this.txtLicenciaConducir.Text.Trim();
                    beGuiaRemision.MotivoTraslado = (int?)Convert.ToInt32(this.cboMotivoTraslado.SelectedValue);
                    beGuiaRemision.FechaIniTraslado = this.dtpFecTraslado.Value;
                    beGuiaRemision.TipoComprobante = string.Empty;
                    beGuiaRemision.NombreTransportista = this.txtNombreTransportista.Text.Trim();
                    beGuiaRemision.RUCTransportista = this.txtRucTransportista.Text.Trim();
                    if (rdbFactura.Checked && this.txtNroComprobante.Text != "000000") beGuiaRemision.TipoComprobante = Constantes.VENTA_FACTURA_CODE;
                    if (rdbBoleta.Checked && this.txtNroComprobante.Text != "000000") beGuiaRemision.TipoComprobante = Constantes.VENTA_BOLETA_CODE;
                    beGuiaRemision.CreadoPor = VariablesGlobales.GlobalEnUsuario.UsuarioID;

                    Venta beVentaVal = new Venta();
                    beVentaVal.TipoVenta = Constantes.GUIAREMISION_CODE;
                    beVentaVal.NroVenta = Convert.ToInt32(this.txtNroGuiaRemision.Text);
                    if (bc.validarNroDocumento(beVentaVal))
                    {
                        MessageBox.Show("El nro de guía de remisión ya fue ingresado al sistema. Ingrese otro número.", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtNroGuiaRemision.Focus();
                        return;
                    }
                    GuiaRemisionID = bc.InsertarGuiaRemision(beGuiaRemision);
                    if (GuiaRemisionID > 0)
                    {
                        MessageBox.Show("Se ingresaron los datos correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        imprimirOnlyGuiaRemision();
                        cerrarForm();
                    }
                    else
                        MessageBox.Show("Error al ingresar los datos, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private void imprimirOnlyGuiaRemision()
        {
            rptGuiaRemision rpt = new rptGuiaRemision();
            DataTable dt = (DataTable)(new Fuyao.Win.UI.Reportes.dsReportesTableAdapters.GuiaRemisionTableAdapter().GetGuiaRemisionByID(GuiaRemisionID));
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            rpt.Subreports[0].SetDataSource(ds);
            rpt.SetDataSource(ds);
            frmReportViewer frm = new frmReportViewer(rpt);
            frm.ShowDialog();
        }

        private void cerrarForm()
        {
            this.Close();
            action = true;
        }

        private bool validarCamposRequeridos()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Ingrese los campos requeridos: " + System.Environment.NewLine);

            bool isValid = true;

            if (String.IsNullOrEmpty(this.lblSerieGuiaRemision.Text))
            {
                ErrorProv.SetError(this.lblSerieGuiaRemision, "No se ha cargado el número de serie para la guía de remisión");
                sb.Append("- Número de serie de la guía de remisión" + System.Environment.NewLine);
                isValid = false;
            }

            if (this.txtNroGuiaRemision.Text == "000000")
            {
                ErrorProv.SetError(this.txtNroGuiaRemision, "No se ha cargado el número de guía de remisión");
                sb.Append("- Número de la guía de remisión" + System.Environment.NewLine);
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtRazonSocial.Text))
            {
                ErrorProv.SetError(this.txtRazonSocial, "Ingrese la razón social del cliente");
                sb.Append("- Razón social del cliente" + System.Environment.NewLine);
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtPuntollegada.Text))
            {
                ErrorProv.SetError(this.txtPuntollegada, "Ingrese la dirección del cliente");
                sb.Append("- Dirección del cliente" + System.Environment.NewLine);
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtDepartamento.Text))
            {
                ErrorProv.SetError(this.txtDepartamento, "Ingrese el departamento del cliente");
                sb.Append("- Departamento del cliente" + System.Environment.NewLine);
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtProvincia.Text))
            {
                ErrorProv.SetError(this.txtProvincia, "Ingrese la provincia del cliente");
                sb.Append("- Provincia del cliente" + System.Environment.NewLine);
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtDistrito.Text))
            {
                ErrorProv.SetError(this.txtDistrito, "Ingrese el distrito del cliente");
                sb.Append("- Distrito del cliente" + System.Environment.NewLine);
                isValid = false;
            }

            if (this.cboConductor.SelectedIndex == 0 || this.cboConductor.SelectedIndex == -1)
            {
                sb.Append("- Seleccione el conductor" + System.Environment.NewLine);
                ErrorProv.SetError(cboConductor, "Seleccione el conductor");
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtMarca.Text) && this.cboConductor.Text != Constantes.PARAMETRO_TAXI)
            {
                ErrorProv.SetError(this.txtMarca, "Ingrese la marca del vehículo de transporte");
                sb.Append("- Marca del vehículo de transporte" + System.Environment.NewLine);
                isValid = false;
            }

            if (String.IsNullOrEmpty(this.txtPlaca.Text) && this.cboConductor.Text != Constantes.PARAMETRO_TAXI)
            {
                ErrorProv.SetError(this.txtPlaca, "Ingrese la placa del vehículo de transporte");
                sb.Append("- Placa del vehículo de transporte" + System.Environment.NewLine);
                isValid = false;
            }

            if (dgvDetalles.RowCount == 0)
            {
                sb.Append("- No se agregaron registros al detalle de la guía de remisión" + System.Environment.NewLine);
                isValid = false;
            }          
    

            if (!isValid)
                MessageBox.Show(sb.ToString(), "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            return isValid;
        }

        private void txt_TextChanged(object sender, EventArgs e)
        {
            TextBox tbx = (TextBox)sender;
            ErrorProv.SetError(tbx, "");
        }

        private void btnGrabaNroComprobante_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Ingrese los campos requeridos: " + System.Environment.NewLine);

            bool isValid = true;

            if (!rdbFactura.Checked && !rdbBoleta.Checked)
            {
                ErrorProv.SetError(this.rdbBoleta, "Seleccione el tipo de comprobante");
                sb.Append("- Tipo de comprobante" + System.Environment.NewLine);
                isValid = false;
            }

            if (this.txtNroComprobante.Text == "000000")
            {
                ErrorProv.SetError(this.txtNroComprobante, "Ingrese el Nro. de comprobante");
                sb.Append("- Nro. de comprobante" + System.Environment.NewLine);
                isValid = false;
            }

            if (!isValid)
                MessageBox.Show(sb.ToString(), "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else registraNroComprobanteforGuiaRemision();
        }

        private void registraNroComprobanteforGuiaRemision()
        {
            if (bc.UpdateNroComprobanteforGuiaRemision(GuiaRemisionID,Convert.ToInt32(this.txtNroComprobante.Text),(rdbFactura.Checked ? Constantes.VENTA_FACTURA_CODE : Constantes.VENTA_BOLETA_CODE),VariablesGlobales.GlobalEnUsuario.UsuarioID))
            {
                MessageBox.Show("Se actualizaron los datos correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                cerrarForm();
            }
            else
                MessageBox.Show("Error al ingresar los datos, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

        }

        private void txt_KeyPress(object sender, KeyPressEventArgs e)
        {
            Utilitarios.vSoloNumeros(e);
        }

        private void txtNroGuiaRemision_Leave(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtNroGuiaRemision.Text)) txtNroGuiaRemision.Text = bc.getNumeroGuia(Constantes.PARAMETRO_NumeroGuiaRemision);
            else if (!string.IsNullOrEmpty(txtNroGuiaRemision.Text)) txtNroGuiaRemision.Text = String.Format("{0:000000}", Convert.ToInt32(txtNroGuiaRemision.Text));
            this.cboMotivoTraslado.Focus();
        }

        private void txtNroGuiaRemision_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Enter)) e.Handled = false;
            else e.Handled = true;
        }
    }
}
